package com.zjsru.oneDay202209;

/**
 * @Author: likew
 * @Date: 2022/9/25
 * 旋转数字
 * 如果一个数的每位数字被旋转以后仍然还是一个数字，则这个数是有效的。0, 1, 和 8 被旋转后仍然是它们自己；
 * 2 和 5 可以互相旋转成对方（在这种情况下，它们以不同的方向旋转，换句话说，2 和 5 互为镜像）；
 * 6 和 9 同理，除了这些以外其他的数字旋转以后都不再是有效的数字。
 *
 *
 * 输入: 10
 * 输出: 4
 * 解释:
 * 在[1, 10]中有四个好数： 2, 5, 6, 9。
 * 注意 1 和 10 不是好数, 因为他们在旋转之后不变。
 */
public class RotatedDigits {
    
    /**
     * 于每一个位数都需要翻转，因此如果当前枚举到的数值 x 中包含非有效翻转数字（非 0125689）则必然不是好数；而在每一位均为有效数字的前提下，
     * 若当前枚举到的数值 x,中包含翻转后能够发生数值上变化的数值（2569），则为好数。
     */
    public int rotatedDigits(int n) {
        int ans = 0;
        out:
        for (int i = 1; i <= n; i++) {
            boolean ok = false;
            int x = i;
            while (x != 0) {
                int t = x % 10;
                x /= 10;
                if (t == 2 || t == 5 || t == 6 || t == 9) {
                    ok = true;
                } else if (t != 0 && t != 1 && t != 8) {
                    continue out;
                }
            }
            if (ok) {
                ans++;
            }
        }
        return ans;
    }
    
    public static void main(String[] args) {
        RotatedDigits rotatedDigits = new RotatedDigits();
        int n = 10;
        System.out.println(rotatedDigits.rotatedDigits(n));
    }
}
